<?php


namespace App\Http\Controllers\Api;

use App\Models\User\User;
use Illuminate\Http\Request;
use mysql_xdevapi\Exception;
use Validator;
/**
 * @group 三方调用接口 post方式
 *
 * json格式
 * 字段:
 *     function: 启用函数的功能
 *          adduser 病人办理住院 数据添加
 *          deleteuser 病人办理退院
 *
 *     data: 数据
 *          adduser数据格式
 *
 *
 *
 * 举例说明
 *
 * {
 *  function:adduser,
 *
 *
 *
 * }
 */
class BonusController
{

    /**
     * api接口
     * json格式
     * 字段:
     *     function: 启用函数的功能
     *          adduser 病人办理住院 数据添加
     *          deleteuser 病人办理退院
     *
     *     data: 数据
     *          adduser数据格式
     *
     *
     *
     * 举例说明
     *
     * {
     *  function:adduser,
     *
     *
     *
     * }
     *
     * @bodyParam function string required 调用的功能 adduser 住院 deleteuser出院
     * @bodyParam token string required 加密token
     * @bodyParam time int required 时间戳 过期之后不能添加信息
     * @bodyParam data string required 数据json格式
     */
    public function api(Request $request){

        //数据验证
        $validator = Validator::make($request->all(),genValidate());
        if($validator->fails()){
            return response()->json(encodeMsg($validator->errors()->messages(),400),400);
        }
        $function = $request->get('function');
        //启动添加用户的功能
        if($function == 'adduser')
        {
            //做映射 因为传递过来的key和数据库的key不一样
            $maps = ['name'=>"name",
                'hospital_number'=>"hospital_id",
                'registration_number'=>"register_id",
                'identify_number'=>'card',
                'social_security_number'=>"carte_card",
                'visit_number'=>"medical_card",
                'hospitalization_date'=>'hospitalization_date',
                'phone'=>'phone',
            ];
            try {
                $data = json_decode($request->get('data'));
                $data = $this->genUserData();
            }catch (\Exception $e)
            {
                return response('data illegal',411);
            }
            //TODO 设计一个表 记录每一次数据添加的结果 成功 失败 添加时间 失败原因
            foreach ($data as $user){
                $userInsertData = [];
                foreach($maps as $k=>$v){
                    $userInsertData[$v] = $user[$k];
                }

                try {
                    //添加用户逻辑
                    User::create($userInsertData);

                }catch (\Exception $e){
                    dd($e->getMessage());
                }
                //添加优惠券功能
                $bonus = $data['voucher_type'];
                //TODO 判断优惠券只能有最多有 ABC且唯一
                //说明 优惠券有两张表 位于bonus之中 其中bonus_record表是用户所有优惠券的信息
                //其中包含了使用过的优惠券和目前在账上未使用的优惠券
                //bonus表示用户现在账上的优惠券 一个用户只能ABC三种类型的优惠券不能重复 比如有A B 或者 A C不能是 AA C
                //所以该表下面有唯一索引 user_id结合type不能重复
                //还有个优惠券总类型表 里面有A B C三种类型优惠券对应的金额 读取总类型表里面的金额 把金额填入优惠券的费用中即可
                //array_push($userInsertDatas,$userInsertData);
            }

        }elseif($function == "addBonus"){
            //添加优惠券 功能
            return true;
        }else{
            return true;
        }
    }

    private function genData()
    {
        $data = array(
            'function'=>'adduser',
            'token'=>'123',
            'time'=>123141515,
            'data'=>array(
                ['name'=>$this->genString(), 'hospital_number'=>'no13a13fg12355','registration_number'=>'nozas1213',
                    'identify_number'=>$this->genNumber(),'social_security_number'=>'510123514','visit_number'=>123145,
                    'hospitalization_date'=>'2019-11-14T18:18:18','voucher_type'=>'A','user_type'=>'1'
                ],

            )
        );

        return $data;

    }

    private function genUserData($len=10)
    {
        $datas = array();
        for($i=0;$i<$len;$i++)
        {
            $d = ['name'=>$this->genString(),
                'hospital_number'=>$this->genNumber(8),
                'registration_number'=>$this->genNumber(7),
                'identify_number'=>$this->genNumber(),
                'social_security_number'=>$this->genNumber(7),
                'visit_number'=>$this->genNumber(5),
                'hospitalization_date'=>'2019-11-14T18:18:18',
                'voucher_type'=>array("A","B","C"),
                'user_type'=>'1',
                'phone'=>1222222,
                'no'=>$this->genNumber(20)
            ];
            array_push($datas,$d);
        }

        return $datas;
    }

    //生成测试数据随机字符串
    private function genString($len=6)
    {
        $char = "";
        for($i = 0;$i<$len;$i++)
        {
            $c = chr(mt_rand(97,122));
            $char = $char.$c;
        }
        return $char;
    }


    //生成测试数据随机数字
    private function genNumber($len=11)
    {
        $char = "";
        for($i = 0;$i<$len;$i++)
        {
            $c = (string) mt_rand(0,9);
            $char =$char.$c;
        }
        return $char;
    }
}